package ranveterinaria.dao;

import ranveterinaria.excepcion.DAOExcepcion;
import ranveterinaria.excepcion.LoginExcepcion;
import ranveterinaria.modelo.UsuarioModelo;
import ranveterinaria.util.ConexionBD;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

public class UsuarioDAO extends BaseDAO{
		
	public void insertar(UsuarioModelo vo) throws DAOExcepcion {
		
		String query = "INSERT INTO USUARIO (CODIGO_USUARIO,NOMBRE_USUARIO,CLAVE_USUARIO,TIPO_USUARIO) VALUES(?,?,?,?);";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, vo.getCodigoUsuario());
			stmt.setString(2, vo.getNombreUsuario());
			stmt.setString(3, vo.getClaveUsuario());
			stmt.setString(4, vo.getTipoUsuario());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Collection<UsuarioModelo> listar() throws DAOExcepcion {
        Collection<UsuarioModelo> c = new ArrayList<UsuarioModelo>();
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
                con = ConexionBD.obtenerConexion();
                String query = "SELECT CODIGO_USUARIO,NOMBRE_USUARIO,CLAVE_USUARIO,TIPO_USUARIO FROM USUARIO ORDER BY NOMBRE_USUARIO DESC";
                stmt = con.prepareStatement(query);
                rs = stmt.executeQuery();
                while (rs.next()) {
                	UsuarioModelo vo = new UsuarioModelo();
                	
					vo.setCodigoUsuario(rs.getString(1));
					vo.setNombreUsuario(rs.getString(2));
					vo.setClaveUsuario(rs.getString(3));
					vo.setTipoUsuario(rs.getString(4));

					c.add(vo);
                }

        } catch (SQLException e) {
                System.err.println(e.getMessage());
                throw new DAOExcepcion(e.getMessage());
        } finally {
                this.cerrarResultSet(rs);
                this.cerrarStatement(stmt);
                this.cerrarConexion(con);
        }
        return c;
	}

	public void eliminar(String idUsuario) throws DAOExcepcion {
		
		String query = "DELETE FROM USUARIO WHERE CODIGO_USUARIO = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);

			stmt.setString(1, idUsuario);
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public UsuarioModelo validar(String codigoUsuario, String claveUsuario) throws DAOExcepcion, LoginExcepcion {
		String query = "SELECT CODIGO_USUARIO,NOMBRE_USUARIO,CLAVE_USUARIO,TIPO_USUARIO FROM USUARIO WHERE CODIGO_USUARIO = ? AND CLAVE_USUARIO = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		UsuarioModelo vo = new UsuarioModelo();
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, codigoUsuario);
			stmt.setString(2, claveUsuario);
			rs = stmt.executeQuery();

			if (rs.next()) {
				vo.setCodigoUsuario(rs.getString(1));
				vo.setNombreUsuario(rs.getString(2));
				vo.setClaveUsuario(rs.getString(3));
				vo.setTipoUsuario(rs.getString(4));
			} else {
				throw new LoginExcepcion("No existe");
			}
		} catch (LoginExcepcion e) {
			System.err.println(e.getMessage());
			throw new LoginExcepcion(e.getMessage());
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	
}





